单位向量

通常情况下, 向量可以在许多情况下使用, 但有时您希望约束它们的值 (如处理角度时), 这就是我们将它们单位化的原因。这本质上是一个数学技巧, 用于将长度n的向量转换为长度为1的向量, 这意味着向量分量的归一化在0和1之间。此向量也叫 单位向量

要计算单位向量, 我们必须首先拥有原始向量分量, 然后使用它们来获取向量的长度。然后, 我们将每个矢量分量除以此长度, 以得到形成单位向量分量的单位向量分量, 其中所有坐标的平方和等于1。具体步骤:

首先, 我们获取向量的坐标, 并得到组件:

vx = (x2 - x1) = (7 - 1) = 6
vy = (y2 - y1) = (4 - 1) = 3

然后, 我们使用这些值来计算矢量的长度:

len = sqr(vx2 + vy2) = sqr(36 + 9) = sqr(45) = 6.708203932499369

现在, 这给了我们向量a的确切长度, 所以让我们用它来单一化两个向量分量 vx 和vx:

vx = (vx/len) = (6 / 6.708203932499369) = 0.8944271909999159
vy = (vy/len) = (3 / 6.708203932499369) = 0.4472135954999579
a = 1

棒极了!我们已经将矢量单位化了!但在GamerMaker Studio 2的上下文中, 这究竟是什么实际用途呢?好,来看看实用的例子:

假设你有一个游戏, 玩家必须向敌人射击, 你需要知道子弹物体必须沿着 x 和 y 轴移动多少每一步来击中它:

为此, 你会使用玩家和敌人的坐标来获取矢量分量和长度, 然后你会将它们单位化, 以获得0和1之间的值, 你最终会乘以你希望子弹在每一步移动的速度。然后, 您将存储这最后两个值并将其添加到起始 x 和 y 中, 这些值的每个步骤都有。听起来很复杂?不,并不复杂,请看 (为了简单起见, 值已舍入到小数点后一位):

px = 100;
py = 425;
ex = 356;
ey = 83;
bullet_speed = 5;

vx = (ex - px) = 256
vy = (ey - py) = -342

len = sqrt(vx2 + vy2) = sqrt(65536 + 116964) = 427.2

vx = vx / len = 0.6
vy = vy / len = 0.8

speed_x = vx * bullet_speed = 3
speed_y = vy * bullet_speed = 4

所以, 要命中目标, 我们需要在项目符号 x 坐标中加 3, 在其 y 坐标的每一步加4。


-->